package com.woniuxy.servicelayer.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.woniuxy.dal.entity.History;
import com.woniuxy.dal.entity.Userinfo;
import com.woniuxy.dal.mapper.HistoryMapper;
import com.woniuxy.dal.mapper.RangeMapper;
import com.woniuxy.dal.mapper.UserinfoMapper;
import com.woniuxy.servicelayer.HistoryService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * @author rjq51
 * @description 针对表【history(历史记录表)】的数据库操作Service实现
 * @createDate 2023-03-27 17:02:43
 */
@Service
public class HistoryServiceImpl extends ServiceImpl<HistoryMapper, History>
        implements HistoryService {
    @Resource
    private HistoryMapper historyMapper;

    @Resource
    private RangeMapper rangeMapper;

    @Resource
    private UserinfoMapper userinfoMapper;

    //通过用户id查询该用户下的历史记录
    @Override
    public Page<History> selectHistoryByUserId(Integer userId, Integer status, Integer currentPage, Integer pageSize) {

        Page<History> page = new Page<>(currentPage, pageSize);

        //查询条件，通过用户id和日期倒序查询,并按三种状态返回结果
        QueryWrapper<History> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("userId", userId).eq("status", status).orderByDesc("createTime");

        return historyMapper.selectPage(page, queryWrapper);
    }

//    //更新历史记录
//    @Override
//    public Integer updateHistory(Integer rangeId, Integer userId, Integer status) {
//        //当用户点击时实验/靶场时触发，对该用户在此靶场的浏览记录进行操作
//        //通过用户id和靶场id进行单个查询
//        QueryWrapper<History> queryWrapper = new QueryWrapper<>();
//        queryWrapper.eq("rangeId", rangeId).eq("userId", userId);
//        History result = historyMapper.selectOne(queryWrapper);
//
//        System.out.println(result);
//        //当结果不为空时则更新，为空则插入新的记录
//        if (result != null) {
//
//            java.util.Date date = new java.util.Date();
//            java.sql.Timestamp timestamp = new java.sql.Timestamp(date.getTime());
//            result.setCreateTime(timestamp);
//
//            //已有的历史记录状态，为0时可以往1,2走，为2时可以往1走,为1时固定
//            if (result.getStatus() == 0) {
//                if (status == 1) {
//                    //试验成功则查询用户信息，为该用户加分
//                    QueryWrapper<Userinfo> userinfoQueryWrapper = new QueryWrapper<>();
//                    userinfoQueryWrapper.eq("userId", userId);
//                    Userinfo userinfo = userinfoMapper.selectList(userinfoQueryWrapper).get(0);
//                    userinfo.setRangeScore(userinfo.getRangeScore() + 100);
//                    userinfoMapper.updateById(userinfo);
//                }
//            } else if (result.getStatus() == 1) {//已有为1的分支
//                if (status == 0) {
//                    status = 1;
//                } else if (status == 2) {
//                    status = 1;
//                }
//            } else {//已有为2的分支
//                if (status == 1) {//现有为1时加分
//                    QueryWrapper<Userinfo> userinfoQueryWrapper = new QueryWrapper<>();
//                    userinfoQueryWrapper.eq("userId", userId);
//                    Userinfo userinfo = userinfoMapper.selectList(userinfoQueryWrapper).get(0);
//                    userinfo.setRangeScore(userinfo.getRangeScore() + 100);
//                    userinfoMapper.updateById(userinfo);
//                } else if (status == 0) {
//                    status = 2;
//                }
//            }
//
//            return historyMapper.updateHistoryById(status, result.getCreateTime(), userId, rangeId);
//
//        } else {
//            History history = new History();
//            history.setHistoryId(0);
//            history.setRangeId(rangeId);
//            history.setUserId(userId);
//            history.setStatus(0);
//            history.setRangeName(rangeMapper.selectById(rangeId).getRangeName());
//
//            java.util.Date date = new java.util.Date();
//            java.sql.Timestamp timestamp = new java.sql.Timestamp(date.getTime());
//            history.setCreateTime(timestamp);
//            return historyMapper.insert(history);
//        }
//    }

    @Override
    public Integer addHistory(Integer rangeId, Integer userId, Integer status) {
        History history = new History();

        //获取当前时间
        java.util.Date date = new java.util.Date();
        java.sql.Timestamp timestamp = new java.sql.Timestamp(date.getTime());
        history.setCreateTime(timestamp);

        if (status == 1) {//状态为1时加分
            QueryWrapper<Userinfo> userinfoQueryWrapper = new QueryWrapper<>();
            userinfoQueryWrapper.eq("userId", userId);
            Userinfo userinfo = userinfoMapper.selectList(userinfoQueryWrapper).get(0);
            userinfo.setRangeScore(userinfo.getRangeScore() + 100);
            userinfoMapper.updateById(userinfo);
        }

        history.setHistoryId(0);
        history.setRangeName(rangeMapper.selectById(rangeId).getRangeName());
        history.setRangeId(rangeId);
        history.setUserId(userId);
        history.setStatus(status);

        return historyMapper.insert(history);
    }
}